//
//  QBStatus.swift
//  Wei91BoiOS
//
//  Created by bing on 16/3/25.
//  Copyright © 2016年 bing. All rights reserved.
//

import UIKit

class QBStatus: NSObject {
    
    /// 创建时间
    var created_at: String?
    
    /// 微博ID
    var id: Int64 = 0;
    
    /// 微博信息内容
    var text: String? {
        didSet {
          attrText = text?.emoticonTextToEmoticonAttrString(UIFont.systemFontOfSize(QBStatusCellContentSize))
        }
    }
    
    /// 带图片的微博内容
    var attrText: NSAttributedString?
    
    /// 微博来源
    var source: String? {
        
        didSet {
            // 当KVC设置来源:<a href=\"http://weibo.com/\" rel=\"nofollow\">微博 weibo.com</a>
            // 截取>(.*?)<: 微博 weibo.com
            // 在didSet给source不会再次调用didSet
            source = source?.sinaSource()
        }
    }
    
    /// 微博配图
    var pic_urls: [[String: AnyObject]]? {
        
        didSet {
            // 解析出[[String: AnyObject]]里面的图片地址,转成NSURL放到storePictureURLs数组里面来,以后外面访问就比较方便了
            if pic_urls?.count == 0 {
                return
            }
            
            // 真有图片
            storePictureURLs = [NSURL]()
            // 遍历pic_urls
            for dict in pic_urls! {
                
                guard let urlString = dict["thumbnail_pic"] as? String else {
                    // 和可选绑定相反，没有值才进来，urlString可以带代码款外面用
                    print("没有值")
                    continue
                    // break
                    // return
                }
               
                // 能到下面来 urlString有值
                // 创建url
                guard let url = NSURL(string: urlString) else {
                    print("url没有值")
                    continue
                }
                
                storePictureURLs?.append(url)
            }
        }
    }

    /// 微博配图，里面存储的是 微博配图的url地址
    var storePictureURLs: [NSURL]?
    
    /// 转发数
    var reposts_count: Int = 0
    
    /// 评论数
    var comments_count: Int = 0
    
    /// 表态数
    var attitudes_count: Int = 0
    
    /// 微博模型里面有一个user,用户模型,虽然定义的是CZUser模型,KVC并不会自动将user字典转成模型,会将user原来的内容(字典)赋值user属性
    /// 需要在KVC字典转模型的时候,拦截user这个属性的设置,自己来将字典转成CZUser
    var user: QBUser?
    
    /// 被转发的微博
    var retweeted_status: QBStatus?
    
    /// 行高
    var rowHeight: CGFloat?

    /// 字典转模型
    init(dict: [String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        // 拦截当key = user时候我们自己来处理,字典转模型
        if key == "user" {
            // 获取value
            if let dict = value as? [String: AnyObject] {
                // 字典转模型，给user赋值
                user = QBUser(dict: dict)
            
            }
            return
        }
        
        // 拦截retweeted_status来转模型
        if key == "retweeted_status" {
            // 获取value
            if let dict = value as? [String: AnyObject] {
                retweeted_status = QBStatus(dict: dict)
            }
            return
        }
        
        
        super.setValue(value, forKey: key)
    }
    
    /// 字典里面的key在模型找不到对应的属性
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {

    }
    
    /// 对象打印
    override  var description: String {
        // 只读计算型属性
        let keys = ["created_at", "id", "text", "source", "pic_urls", "reposts_count", "comments_count", "attitudes_count", "user"]
        
        return "\n \t\(dictionaryWithValuesForKeys(keys).description)"
    }
    
    
}
